<script setup lang="ts">
	import { computed, ref } from "vue";
	import { http } from '@/utils/http';
	import type { XtxGuessInstance } from "@/types/components"
	import { onLoad, onShow } from "@dcloudio/uni-app";
	const guessRef = ref<XtxGuessInstance>();
	const jgg = ref("");
	const goodlist = ref([]);
	const getdata = async () => {
		const res = await http({
			url: "/member/cart",
			method: "GET"
		})
		console.log(res)
		goodlist.value = res.result
	}
	const shanchu = async (e) => {
		console.log(e)
		const res = await http({
			url: "/member/cart",
			method: "DELETE",
			data: {
				ids: [e]

			}
		})
		if (res.code == '1') {
			uni.showToast({
				title: "删除成功"
			})
			getdata()
		}
	}
	onShow(() => {
		const key = uni.getStorageSync("key");
		if (key) {
			jgg.value = true
			getdata();
		} else {
			jgg.value = false

		}
	})

	const onscroll = () => {
		console.log(1)
		guessRef.value?.getMore();
	}
	const isselectall = computed(() => {
		return goodlist.value.length && goodlist.value.every((v) => v.selected)
	})
	const sfqx = async () => {
		const _isSelectedAll = !isselectall.value
		goodlist.value.forEach(el => {
			el.selected = _isSelectedAll
		})
		console.log(isselectall)
		const res = await http({
			url: "/member/cart/selected",
			method: "PUT",
			data: {
				selected: _isSelectedAll
			}
		})
	}
	const onChangeCount = async (item) => {
		const res = await http({
			url: `/member/cart/${item.skuId}`,
			method: "PUT",
			data: {
				selected: item.selected,
				count: item.count
			}
		})
	}
	const gwctx = async (item) => {
		console.log(item)
		item.selected = !item.selected
		const res = await http({
			url: `/member/cart/${item.skuId}`,
			method: "PUT",
			data: {
				selected: item.selected,
				count: item.count
			}
		})
	}
	//选中列表
	const xzdpplb = computed(() => {
		return goodlist.value.filter((v) => v.selected)

	})
	//选中总件数
	const selectedcount = computed(() => {
		return xzdpplb.value.reduce((sum, item) => sum + item.count, 0)
	})
	//选中金额
	const xzje = computed(() => {
		return xzdpplb.value.reduce((sum, item) => sum + item.count * item.nowPrice, 0).toFixed(2)
	})
	const gopay = () => {
		if (selectedcount.value == 0) {
			return uni.showToast({
				icon: "none",
				title: "请选择商品"
			})
		}
		uni.navigateTo({
			url: "/pagesOrder/create/create"
		})
	}
</script>

<template>
	<scroll-view scroll-y style="height:100vh" @scrolltolower="onscroll" class="scroll-view">
		<!-- 已登录: 显示购物车 -->
		<template v-if="true">
			<!-- 购物车列表 -->
			<view class="cart-list" v-if="jgg">
				<!-- 优惠提示 -->
				<view class="tips">
					<text class="label">满减</text>
					<text class="desc">满1件, 即可享受9折优惠</text>
				</view>
				<!-- 滑动操作分区 -->
				<uni-swipe-action>
					<!-- 滑动操作项 -->
					<uni-swipe-action-item v-for="item in goodlist" :key="item" class="cart-swipe">
						<!-- 商品信息 -->
						<view class="goods">
							<!-- 选中状态 -->
							<text class="checkbox" @tap="gwctx(item)" :class="{ checked: item.selected }"></text>
							<navigator :url="`/pages/goods/goods?id=${item.id}`" hover-class="none" class="navigator">
								<image mode="aspectFill" class="picture" :src="item.picture"></image>
								<view class="meta">
									<view class="name ellipsis">{{item.name}}</view>
									<view class="attrsText ellipsis">{{item.attrsText}}</view>
									<view class="price">{{item.price}}</view>
								</view>
							</navigator>
							<!-- 商品数量 -->
							<view class="count">
								<vk-data-input-number-box v-model="item.count" :min="1" :max="item.stock"
									:index="item.skuId" @change="onChangeCount(item)" />
							</view>
						</view>
						<!-- 右侧删除按钮 -->
						<template #right>
							<view class="cart-swipe-right">
								<button class="button delete-button" @click="shanchu(item.skuId)">删除</button>
							</view>
						</template>
					</uni-swipe-action-item>
				</uni-swipe-action>
			</view>
			<!-- 购物车空状态 -->
			<view class="cart-blank" v-else>
				<image src="/static/images/blank_cart.png" class="image" />
				<text class="text">购物车还是空的，快来挑选好货吧</text>
				<navigator url="/pages/index/index" hover-class="none">
					<button class="button">去首页看看</button>
				</navigator>
			</view>
			<!-- 吸底工具栏 -->
			<view class="toolbar">
				<text class="all" :class="{ checked: isselectall }" @click="sfqx">全选</text>
				<text class="text">合计:</text>
				<text class="amount">{{xzje}}</text>
				<view class="button-grounp">
					<view class="button payment-button" @click="gopay" :class="{ disabled: isselectall }">
						去结算({{selectedcount}})
					</view>
				</view>
			</view>
		</template>
		<!-- 未登录: 提示登录 -->
		<view class="login-blank" v-else>
			<text class="text">登录后可查看购物车中的商品</text>
			<navigator url="/pages/login/login" hover-class="none">
				<button class="button">去登录</button>
			</navigator>
		</view>
		<!-- 猜你喜欢 -->
		<XtxGuess ref="guessRef"></XtxGuess>
		<!-- 底部占位空盒子 -->
		<view class="toolbar-height"></view>
	</scroll-view>
</template>

<style lang="scss">
	// 根元素
	:host {
		height: 100vh;
		display: flex;
		flex-direction: column;
		overflow: hidden;
		background-color: #f7f7f8;
	}

	// 滚动容器
	.scroll-view {
		flex: 1;
	}

	// 购物车列表
	.cart-list {
		padding: 0 20rpx;

		// 优惠提示
		.tips {
			display: flex;
			align-items: center;
			line-height: 1;
			margin: 30rpx 10rpx;
			font-size: 26rpx;
			color: #666;

			.label {
				color: #fff;
				padding: 7rpx 15rpx 5rpx;
				border-radius: 4rpx;
				font-size: 24rpx;
				background-color: #27ba9b;
				margin-right: 10rpx;
			}
		}

		// 购物车商品
		.goods {
			display: flex;
			padding: 20rpx 20rpx 20rpx 80rpx;
			border-radius: 10rpx;
			background-color: #fff;
			position: relative;

			.navigator {
				display: flex;
			}

			.checkbox {
				position: absolute;
				top: 0;
				left: 0;

				display: flex;
				align-items: center;
				justify-content: center;
				width: 80rpx;
				height: 100%;

				&::before {
					content: '\e6cd';
					font-family: 'erabbit' !important;
					font-size: 40rpx;
					color: #444;
				}

				&.checked::before {
					content: '\e6cc';
					color: #27ba9b;
				}
			}

			.picture {
				width: 170rpx;
				height: 170rpx;
			}

			.meta {
				flex: 1;
				display: flex;
				flex-direction: column;
				justify-content: space-between;
				margin-left: 20rpx;
			}

			.name {
				height: 72rpx;
				font-size: 26rpx;
				color: #444;
			}

			.attrsText {
				line-height: 1.8;
				padding: 0 15rpx;
				font-size: 24rpx;
				align-self: flex-start;
				border-radius: 4rpx;
				color: #888;
				background-color: #f7f7f8;
			}

			.price {
				line-height: 1;
				font-size: 26rpx;
				color: #444;
				margin-bottom: 2rpx;
				color: #cf4444;

				&::before {
					content: '￥';
					font-size: 80%;
				}
			}

			// 商品数量
			.count {
				position: absolute;
				bottom: 20rpx;
				right: 5rpx;

				display: flex;
				justify-content: space-between;
				align-items: center;
				width: 220rpx;
				height: 48rpx;

				.text {
					height: 100%;
					padding: 0 20rpx;
					font-size: 32rpx;
					color: #444;
				}

				.input {
					height: 100%;
					text-align: center;
					border-radius: 4rpx;
					font-size: 24rpx;
					color: #444;
					background-color: #f6f6f6;
				}
			}
		}

		.cart-swipe {
			display: block;
			margin: 20rpx 0;
		}

		.cart-swipe-right {
			display: flex;
			height: 100%;

			.button {
				display: flex;
				justify-content: center;
				align-items: center;
				width: 50px;
				padding: 6px;
				line-height: 1.5;
				color: #fff;
				font-size: 26rpx;
				border-radius: 0;
			}

			.delete-button {
				background-color: #cf4444;
			}
		}
	}

	// 空状态
	.cart-blank,
	.login-blank {
		display: flex;
		justify-content: center;
		align-items: center;
		flex-direction: column;
		height: 60vh;

		.image {
			width: 400rpx;
			height: 281rpx;
		}

		.text {
			color: #444;
			font-size: 26rpx;
			margin: 20rpx 0;
		}

		.button {
			width: 240rpx !important;
			height: 60rpx;
			line-height: 60rpx;
			margin-top: 20rpx;
			font-size: 26rpx;
			border-radius: 60rpx;
			color: #fff;
			background-color: #27ba9b;
		}
	}

	// 吸底工具栏
	.toolbar {
		position: fixed;
		left: 0;
		right: 0;
		bottom: calc(var(--window-bottom));
		z-index: 1;

		height: 100rpx;
		padding: 0 20rpx;
		display: flex;
		align-items: center;
		border-top: 1rpx solid #ededed;
		border-bottom: 1rpx solid #ededed;
		background-color: #fff;

		.all {
			margin-left: 25rpx;
			font-size: 14px;
			color: #444;
			display: flex;
			align-items: center;
		}

		.all::before {
			font-family: 'erabbit' !important;
			content: '\e6cd';
			font-size: 40rpx;
			margin-right: 8rpx;
		}

		.checked::before {
			content: '\e6cc';
			color: #27ba9b;
		}

		.text {
			margin-right: 8rpx;
			margin-left: 32rpx;
			color: #444;
			font-size: 14px;
		}

		.amount {
			font-size: 20px;
			color: #cf4444;

			.decimal {
				font-size: 12px;
			}

			&::before {
				content: '￥';
				font-size: 12px;
			}
		}

		.button-grounp {
			position: absolute;
			right: 10rpx;
			top: 50%;

			display: flex;
			justify-content: space-between;
			text-align: center;
			line-height: 72rpx;
			font-size: 13px;
			color: #fff;
			transform: translateY(-50%);

			.button {
				width: 240rpx;
				margin: 0 10rpx;
				border-radius: 72rpx;
			}

			.payment-button {
				background-color: #27ba9b;

				&.disabled {
					opacity: 0.6;
				}
			}
		}
	}

	// 底部占位空盒子
	.toolbar-height {
		height: 100rpx;
		box-sizing: content-box;
	}
</style>